GParamSpec *pspec,
GtkFileChooserDefault *impl)
{
+ impl->expand_folders = gtk_expander_get_expanded(GTK_EXPANDER (impl->save_expander));
update_appearance (impl);
}
GtkFileChooserSettings *settings;
LocationMode location_mode;
gboolean show_hidden;
+ gboolean expand_folders;
settings = _gtk_file_chooser_settings_new ();
location_mode = _gtk_file_chooser_settings_get_location_mode (settings);
show_hidden = _gtk_file_chooser_settings_get_show_hidden (settings);
+ expand_folders = _gtk_file_chooser_settings_get_expand_folders (settings);
g_object_unref (settings);
location_mode_set (impl, location_mode, TRUE);
gtk_file_chooser_set_show_hidden (GTK_FILE_CHOOSER (impl), show_hidden);
+ impl->expand_folders = expand_folders;
+ if (impl->save_expander)
+ gtk_expander_set_expanded (GTK_EXPANDER (impl->save_expander), expand_folders);
}
static void
_gtk_file_chooser_settings_set_location_mode (settings, impl->location_mode);
_gtk_file_chooser_settings_set_show_hidden (settings, gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (impl)));
+ _gtk_file_chooser_settings_set_expand_folders (settings, impl->expand_folders);
/* NULL GError */
_gtk_file_chooser_settings_save (settings, NULL);
#define ELEMENT_TOPLEVEL "gtkfilechooser"
#define ELEMENT_LOCATION "location"
#define ELEMENT_SHOW_HIDDEN "show_hidden"
+#define ELEMENT_EXPAND_FOLDERS "expand_folders"
#define ATTRIBUTE_VERSION "version"
#define ATTRIBUTE_MODE "mode"
#define ATTRIBUTE_VALUE "value"
{
settings->location_mode = LOCATION_MODE_PATH_BAR;
settings->show_hidden = FALSE;
+ settings->expand_folders = FALSE;
}
typedef enum {
STATE_ERROR,
STATE_IN_TOPLEVEL,
STATE_IN_LOCATION,
- STATE_IN_SHOW_HIDDEN
+ STATE_IN_SHOW_HIDDEN,
+ STATE_IN_EXPAND_FOLDERS
} State;
struct parse_state {
value_str);
}
}
+ else if (EQ (element_name, ELEMENT_EXPAND_FOLDERS))
+ {
+ const char *value_str;
+
+ state->state = STATE_IN_EXPAND_FOLDERS;
+
+ value_str = get_attribute_value (attribute_names, attribute_values, ATTRIBUTE_VALUE);
+
+ if (!value_str)
+ set_missing_attribute_error (state, line, col, ATTRIBUTE_VALUE, error);
+ else if (EQ (value_str, VALUE_TRUE))
+ state->settings->expand_folders = TRUE;
+ else if (EQ (value_str, VALUE_FALSE))
+ state->settings->expand_folders = FALSE;
+ else
+ {
+ state->state = STATE_ERROR;
+ g_set_error (error,
+ G_MARKUP_ERROR,
+ G_MARKUP_ERROR_INVALID_CONTENT,
+ _("Line %d, column %d: expected \"%s\" or \"%s\", but found \"%s\" instead"),
+ line,
+ col,
+ VALUE_FALSE,
+ VALUE_TRUE,
+ value_str);
+ }
+ }
else
set_unexpected_element_error (state, line, col, element_name, error);
break;
+ case STATE_IN_EXPAND_FOLDERS:
+ if (EQ (element_name, ELEMENT_EXPAND_FOLDERS))
+ state->state = STATE_IN_TOPLEVEL;
+ else
+ set_unexpected_element_end_error (state, line, col, ELEMENT_EXPAND_FOLDERS, element_name, error);
+
+ break;
+
default:
g_assert_not_reached ();
}
settings->show_hidden = show_hidden ? TRUE : FALSE;
}
+gboolean
+_gtk_file_chooser_settings_get_expand_folders (GtkFileChooserSettings *settings)
+{
+ ensure_settings_read (settings);
+ return settings->expand_folders;
+}
+
+void
+_gtk_file_chooser_settings_set_expand_folders (GtkFileChooserSettings *settings,
+ gboolean expand_folders)
+{
+ settings->expand_folders = expand_folders ? TRUE : FALSE;
+}
+
static char *
settings_to_markup (GtkFileChooserSettings *settings)
{
const char *location_mode_str;
const char *show_hidden_str;
+ const char *expand_folders_str;
if (settings->location_mode == LOCATION_MODE_PATH_BAR)
location_mode_str = MODE_PATH_BAR;
}
show_hidden_str = settings->show_hidden ? VALUE_TRUE : VALUE_FALSE;
+ expand_folders_str = settings->expand_folders ? VALUE_TRUE : VALUE_FALSE;
return g_strdup_printf
("<" ELEMENT_TOPLEVEL ">\n" /* <gtkfilechooser> */
" <" ELEMENT_LOCATION " " ATTRIBUTE_MODE "=\"%s\"/>\n" /* <location mode="path-bar"/> */
" <" ELEMENT_SHOW_HIDDEN " " ATTRIBUTE_VALUE "=\"%s\"/>\n" /* <show_hidden value="false"/> */
+ " <" ELEMENT_EXPAND_FOLDERS " " ATTRIBUTE_VALUE "=\"%s\"/>\n" /* <expand_folders value="false"/> */
"</" ELEMENT_TOPLEVEL ">\n", /* </gtkfilechooser> */
location_mode_str,
- show_hidden_str);
+ show_hidden_str,
+ expand_folders_str);
}
gboolean